home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
MACD 5
/
MACD 5.bin
/
workbench
/
tools
/
czesc_2
/
lyr-o-mat
/
source
/
source.lha
/
words_file.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-05-09
|
10KB
|
327 lines
#include "words.h"
#define ID_STRING "Words.File\n"
UWORD __chip icData[] =
{
/* Plane 0 */
0xFFFF,0xFFFF,0xFFF8,0xFFFF,0xFFFF,0xFFF0,0xFFFF,0xFFFF,
0xFFE0,0xFFFF,0xFFFF,0xFFC0,0xFF3C,0xFFFF,0x01C0,0xFF99,
0xFFFF,0xF3C0,0xFF83,0xFFFF,0xE7C0,0xFFC7,0xFFFF,0xCFC0,
0xFFC3,0xFFFF,0x9FC0,0xFF91,0xFF87,0x3FC0,0xFF38,0xFF33,
0x01C0,0xFFFF,0xFF33,0xFFC0,0xFFFF,0xFF03,0xFFC0,0xFFFF,
0xFF33,0xFFC0,0xFFFF,0x3D33,0xFFC0,0xFFFF,0x9933,0xFFC0,
0xFFFF,0x83FF,0xFFC0,0xFFFF,0xC7FF,0xFFC0,0xFFFF,0xE7FF,
0xFFC0,0xFFFF,0xE7FF,0xFFC0,0xFFFF,0xE7FF,0xFFC0,0xFFFF,
0xFFFF,0xFFC0,0xFFFF,0xFFFF,0xFFC0,0xFFFF,0xFFFF,0xFFC0,
0xE000,0x0000,0x0000,0xC000,0x0000,0x0000,0x8000,0x0000,
0x0000,0x0000,0x0000,0x0000,
/* Plane 1 */
0x0000,0x0000,0x0004,0x0000,0x0000,0x000C,0x0000,0x0000,
0x001C,0x0000,0x0000,0x003C,0x0FFF,0xFFFF,0xFFFC,0x0FFF,
0xFFFF,0xFFFC,0x0E3D,0xFFFE,0x1BFC,0x0F1B,0xFFFF,0xF7FC,
0x0FBF,0xFFFF,0xEFFC,0x0FE7,0xFFFF,0xDFFC,0x0FC3,0xFFCF,
0xFFFC,0x0F33,0xFEEE,0x7FFC,0x0E79,0xFEFE,0x03FC,0x0FFF,
0xFEEF,0xFFFC,0x0FFF,0xFEEF,0xFFFC,0x0FFF,0xFEEF,0xFFFC,
0x0FFE,0x3C27,0xFFFC,0x0FFF,0x1BFF,0xFFFC,0x0FFF,0x9FFF,
0xFFFC,0x0FFF,0xDFFF,0xFFFC,0x0FFF,0xDFFF,0xFFFC,0x0FFF,
0xCFFF,0xFFFC,0x0FFF,0xCFFF,0xFFFC,0x0FFF,0xFFFF,0xFFFC,
0x1FFF,0xFFFF,0xFFFC,0x3FFF,0xFFFF,0xFFFC,0x7FFF,0xFFFF,
0xFFFC,0xFFFF,0xFFFF,0xFFFC,
};
struct Image icI1 =
{
0, 0, /* Upper left corner */
46, 28, 2, /* Width, Height, Depth */
icData, /* Image data */
0x0003, 0x0000, /* PlanePick, PlaneOnOff */
NULL /* Next image */
};
struct DiskObject icon =
{
WB_DISKMAGIC, /* Magic Number */
WB_DISKVERSION, /* Version */
{ /* Embedded Gadget Structure */
NULL, /* Next Gadget Pointer */
0, 0, 46, 29, /* Left,Top,Width,Height */
GADGIMAGE | GADGHCOMP, /* Flags */
RELVERIFY, /* Activation Flags */
BOOLGADGET, /* Gadget Type */
(APTR)&icI1, /* Render Image */
NULL, /* Select Image */
NULL, /* Gadget Text */
NULL, /* Mutual Exclude */
NULL, /* Special Info */
0, /* Gadget ID */
NULL, /* User Data */
},
WBPROJECT, /* Icon Type */
(STRPTR)"Lyr-O-Mat", /* Default Tool */
NULL, /* Tool Type Array */
NO_ICON_POSITION, /* Current X */
NO_ICON_POSITION, /* Current Y */
NULL, /* Drawer Structure */
NULL, /* Tool Window */
0 /* Stack Size */
};
struct TagItem FRTags[] =
{
ASL_Hail,NULL,
ASL_FuncFlags,0L,
ASL_LeftEdge,0L,
ASL_TopEdge,0L,
ASL_Dir,0L,
ASL_Pattern,(ULONG)"~(#?.info)",
ASL_File,0L,
TAG_DONE,0L
};
struct EasyStruct ExistsReq =
{
0L,0L,(UBYTE *)"Lyr-O-Mat... Error",
(UBYTE *)"The File\n%s\nalready exists !",
(UBYTE *)" Overwrite | CANCEL",
};
struct EasyStruct wrongfileReq =
{
0L,0L,(UBYTE *)"Lyr-O-Mat... Error",
(UBYTE *)"The file\n%s\n does not exist or\nis not a .wds file",
(UBYTE *)"CANCEL",
};
void saveAll(ULONG mode,UBYTE *title)
{
struct Node *p,*c,*w;
UBYTE fname[256];
int write_it = FALSE;
struct FileRequester *FileReq;
FILE *file;
FRTags[0].ti_Data = (ULONG)title;
FRTags[1].ti_Data = FILF_SAVE;
FRTags[4].ti_Data = (ULONG)winfo.l_dir;
FRTags[6].ti_Data = (ULONG)winfo.l_name;
if(mode != MODE_SAVECONFIG)
{
if(FileReq = (struct FileRequester *)AllocAslRequest(ASL_FileRequest,FRTags))
{
if(RequestFile(FileReq))
{
strcpy(winfo.s_name,FileReq->rf_File);
strcpy(winfo.s_dir,FileReq->rf_Dir);
strcpy(fname,winfo.s_dir);
AddPart(fname,winfo.s_name,256);
}
FreeAslRequest((APTR)FileReq);
}
}
else
{
strcpy(fname,"s:");
AddPart(fname,"Lyr-O-Mat_config.wds",256);
}
if( checkfile(fname,MODE_CHECKEXIST))
{
if(EasyRequest(Project0Wnd,&ExistsReq,NULL,fname) == 1) write_it = TRUE;
}
else write_it = TRUE;
if(write_it)
{
if(file = fopen(fname,"w"))
{
fprintf(file,"%s",ID_STRING);
if(edit.s_p == 1)
{
for(p = winfo.pattern.lh_Head;p->ln_Succ;p = p->ln_Succ)
{
fprintf(file,"%s\n",p->ln_Name);
}
if(edit.pmode)
fprintf(file,"_pmode\n");
else
fprintf(file,"_tmode\n");
}
if(edit.s_c == 1)
{
for(c = winfo.class.lh_Head;c->ln_Succ;c = c->ln_Succ)
{
fprintf(file,"#%s\n",c->ln_Name);
for(w = ((struct classnode *)c)->cl_Words.lh_Head;w->ln_Succ;w = w->ln_Succ)
{
fprintf(file,"?%s\n",w->ln_Name);
}
}
}
if(edit.writeicon)
{
BPTR lock;
strcpy(winfo.icon_name,fname);
strcat(winfo.icon_name,".info");
if(lock = Lock(winfo.icon_name,SHARED_LOCK))UnLock(lock);
else
PutDiskObject(fname,&icon);
}
fclose(file);
}
}
}
void loadAll(ULONG mode,UBYTE *title)
{
UBYTE fname[512];
UBYTE id[256];
struct FileRequester *FileReq;
FILE *file;
UBYTE *s;
int attempt_load = FALSE;
FRTags[0].ti_Data = (ULONG)title;
FRTags[1].ti_Data = 0L;
FRTags[4].ti_Data = (ULONG)winfo.l_dir;
FRTags[6].ti_Data = (ULONG)winfo.l_name;
if(mode != MODE_LOADCONFIG)
{
if(FileReq = (struct FileRequester *)AllocAslRequest(ASL_FileRequest,FRTags))
{
if(RequestFile(FileReq))
{
strcpy(winfo.l_name,FileReq->rf_File);
strcpy(winfo.l_dir,FileReq->rf_Dir);
strcpy(fname,winfo.l_dir);
AddPart(fname,winfo.l_name,512);
attempt_load = TRUE;
}
FreeAslRequest((APTR)FileReq);
}
}
else
{
strcpy(fname,winfo.d_dir);
AddPart(fname,winfo.d_name,256);
if(file = fopen(fname,"r"))
{
fclose(file);
attempt_load = TRUE;
}
}
if(!attempt_load)return;
if((mode != MODE_LOADCONFIG ) && (!checkfile(fname,MODE_CHECKFILE)))
{
EasyRequest(Project0Wnd,&wrongfileReq,NULL,fname);
}
else
{
list_off(LIST_PT);list_off(LIST_CL);list_off(LIST_WD);
GT_SetGadgetAttrs(Project0Gadgets[GDX_addtemplate],Project0Wnd,NULL,
GA_Disabled,TRUE,TAG_DONE);
GT_SetGadgetAttrs(Project0Gadgets[GDX_addclass],Project0Wnd,NULL,
GA_Disabled,TRUE,TAG_DONE);
GT_SetGadgetAttrs(Project0Gadgets[GDX_addword],Project0Wnd,NULL,
GA_Disabled,TRUE,TAG_DONE);
SetWindowTitles(Project0Wnd,title,(UBYTE *)-1L);
edit.pmode = 1;
GT_SetGadgetAttrs(Project0Gadgets[GDX_mode],Project0Wnd,NULL,
GTCY_Active,0,TAG_DONE);
if(file = fopen(fname,"r"))
{
if(mode == MODE_LOADFILE)delAll();
fgets(id,256,file);
while(fgets(id,256,file))
{
s = id + strlen(id) - 1;
while((*s == ' ') || (*s == '\n'))*s-- = '\0';
switch(*id)
{
case '_' : if(!stricmp(id,"_pmode"))
{
edit.pmode = 1;
GT_SetGadgetAttrs(Project0Gadgets[GDX_mode],Project0Wnd,NULL,
GTCY_Active,0,TAG_DONE);
}
else
if(!stricmp(id,"_tmode"))
{
edit.pmode = 0;
GT_SetGadgetAttrs(Project0Gadgets[GDX_mode],Project0Wnd,NULL,
GTCY_Active,1,TAG_DONE);
}
break;
case '#' : if( (edit.l_c == 1) &&
(*(id + 1) ) &&
(!(FindName(&winfo.class,id + 1)))
)
newclass(id + 1);
winfo.currentclass = (struct classnode *)FindName(&winfo.class,id + 1);
break;
case '?' : if((edit.l_c == 1) &&
(*(id + 1) ) &&
(!(FindName(&winfo.currentclass->cl_Words,id + 1)))
)
newword(id + 1);
break;
case ';' : break;
case '+' :
default : if(
(edit.l_p == 1) &&
(*id ) &&
(!(FindName(&winfo.pattern,id)))
)
newpattern(id);
break;
}
}
fclose(file);
}
GT_SetGadgetAttrs(Project0Gadgets[GDX_addtemplate],Project0Wnd,NULL,
GA_Disabled,FALSE,TAG_DONE);
GT_SetGadgetAttrs(Project0Gadgets[GDX_addclass],Project0Wnd,NULL,
GA_Disabled,FALSE,TAG_DONE);
GT_SetGadgetAttrs(Project0Gadgets[GDX_addword],Project0Wnd,NULL,
GA_Disabled,FALSE,TAG_DONE);
SetWindowTitles(Project0Wnd,Project0Wdt,(UBYTE *)-1L);
list_on(LIST_PT);list_on(LIST_CL);list_on(LIST_WD);
}
}
void RequestFName()
{
}
int checkfile(UBYTE *fname,ULONG mode)
{
int rc = FALSE;
FILE *file;
UBYTE check[20];
switch(mode)
{
case MODE_CHECKEXIST : if(file = fopen(fname,"r"))
{
rc = TRUE;
fclose(file);
}
break;
case MODE_CHECKFILE : if(file = fopen(fname,"r"))
{
fgets(check,20,file);
if(!strcmp(check,ID_STRING))rc = TRUE;
fclose(file);
}
break;
}
return rc;
}
struct classnode *LookForClass(UBYTE *cls)
{
struct Node *c;
for(c = winfo.class.lh_Head;c->ln_Succ;c = c->ln_Succ)
{
if(!strncmp(c->ln_Name,cls,strlen(cls)))return (struct classnode *)c;
}
return NULL;
}